Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Mutator method</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Mutator_method"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Mutator_method rootpage-Mutator_method skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Mutator method</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>In <a href="Computer_science" title="Computer science">computer science</a>, a <b>mutator method</b> is a <a href="Method_(computer_science)" class="mw-redirect" title="Method (computer science)">method</a> used to control changes to a variable. They are also widely known as <b>setter</b> methods. Often a setter is accompanied by a <b>getter</b>, which returns the value of the private member variable. They are also known collectively as <b>accessors</b>.
</p><p>The mutator method is most often used in <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a>, in keeping with the principle of <a href="Encapsulation_(computer_science)" class="mw-redirect" title="Encapsulation (computer science)">encapsulation</a>. According to this principle, member <a href="Variable_(programming)" class="mw-redirect" title="Variable (programming)">variables</a> of a <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> are made private to hide and protect them from other code, and can only be modified by a public member function (the mutator method), which takes the desired new value as a parameter, optionally validates it, and modifies the private <a href="Member_variable" title="Member variable">member variable</a>. Mutator methods can be compared to <a href="Assignment_(computer_science)" title="Assignment (computer science)">assignment</a> <a href="Operator_overloading" title="Operator overloading">operator overloading</a> but they typically appear at different levels of the object hierarchy.
</p><p>Mutator methods may also be used in non-object-oriented environments. In this case, a <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">reference</a> to the variable to be modified is passed to the mutator, along with the new value. In this scenario, the compiler cannot restrict code from bypassing the mutator method and changing the variable directly. The responsibility falls to the <a href="Software_developer" class="mw-redirect" title="Software developer">developers</a> to ensure the variable is only modified through the mutator method and not modified directly.
</p><p>In programming languages that support them, <a href="Property_(programming)" title="Property (programming)">properties</a> offer a convenient alternative without giving up the utility of encapsulation.
</p><p>In the examples below, a fully implemented mutator method can also <a href="Data_validation" title="Data validation">validate</a> the input data or take further action such as triggering an <a href="Event_(computing)" title="Event (computing)">event</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Implications">Implications</h2></div>
<p>The alternative to defining mutator and accessor methods, or <a href="Property_(programming)" title="Property (programming)">property</a> blocks, is to give the <a href="Instance_variable" title="Instance variable">instance variable</a> some <a href="Information_hiding" title="Information hiding">visibility</a> other than private and access it directly from outside the objects. Much finer control of access rights can be defined using mutators and accessors. For example, a parameter may be made read-only simply by defining an accessor but not a mutator. The visibility of the two methods may be different; it is often useful for the accessor to be public while the mutator remains protected, package-private or internal.
</p><p>The <a href="Block_(programming)" title="Block (programming)">block</a> where the mutator is defined provides an opportunity for <a href="Data_validation" title="Data validation">validation</a> or preprocessing of incoming data. If all external access is guaranteed to come through the mutator, then these steps cannot be bypassed. For example, if a date is represented by separate private <code>year</code>, <code>month</code> and <code>day</code> variables, then incoming dates can be split by the <code>setDate</code> mutator while for consistency the same private instance variables are accessed by <code>setYear</code> and <code>setMonth</code>. In all cases month values outside of 1 - 12 can be rejected by the same code.
</p><p>Accessors conversely allow for synthesis of useful data representations from internal variables while keeping their structure encapsulated and hidden from outside modules. A monetary <code>getAmount</code> accessor may build a string from a numeric variable with the number of decimal places defined by a hidden <code>currency</code> parameter.
</p><p>Modern programming languages often offer the ability to generate the <a href="Boilerplate_code" title="Boilerplate code">boilerplate</a> for mutators and accessors in a single line—as for example C#'s <code>public string Name { get; set; }</code> and Ruby's <code>attr_accessor :name</code>. In these cases, no code blocks are created for validation, preprocessing or synthesis. These simplified accessors still retain the advantage of encapsulation over simple public instance variables, but it is common that, as <a href="Agile_software_development" title="Agile software development">system designs progress</a>, the software is <a href="Software_maintenance" title="Software maintenance">maintained</a> and requirements change, the <a href="Data_integrity" title="Data integrity">demands on the data</a> become more sophisticated. Many automatic mutators and accessors eventually get replaced by separate blocks of code. The benefit of automatically creating them in the early days of the implementation is that the public interface of the class remains identical whether or not greater sophistication is added, requiring no extensive refactoring if it is.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Manipulation of parameters that have mutators and accessors from <i>inside</i> the class where they are defined often requires some additional thought. In the early days of an implementation, when there is little or no additional code in these blocks, it makes no difference if the private instance variable is accessed directly or not. As validation, <a href="Cross-validation_(statistics)" title="Cross-validation (statistics)">cross-validation</a>, <a href="Data_integrity" title="Data integrity">data integrity</a> checks, preprocessing or other sophistication is added, subtle <a href="Software_bug" title="Software bug">bugs</a> may appear where some internal access makes use of the newer code while in other places it is bypassed.
</p><p>Accessor functions can be less efficient than directly fetching or storing data fields due to the extra steps involved,<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> however such functions are often <a href="Inline_function" class="mw-redirect" title="Inline function">inlined</a> which eliminates the overhead of a function call.
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p><span class="mw-default-size" typeof="mw:File"></span>
</p>
<div class="mw-heading mw-heading3"><h3 id="Assembly">Assembly</h3></div>
<div class="mw-highlight mw-highlight-lang-nasm mw-content-ltr" dir="ltr"><pre><span class="nf">student</span><span class="w"> </span><span class="nv">struct</span>
<span class="w"> </span><span class="nf">age</span><span class="w"> </span><span class="nv">dd</span><span class="w"> </span><span class="nv">?</span>
<span class="nf">student</span><span class="w"> </span><span class="nv">ends</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-nasm mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="nf">.code</span>
<span class="nf">student_get_age</span><span class="w"> </span><span class="nv">proc</span><span class="w"> </span><span class="nv">object</span><span class="p">:</span><span class="kt">DWORD</span>
<span class="w"> </span><span class="nf">mov</span><span class="w"> </span><span class="nb">ebx</span><span class="p">,</span><span class="w"> </span><span class="nv">object</span>
<span class="w"> </span><span class="nf">mov</span><span class="w"> </span><span class="nb">eax</span><span class="p">,</span><span class="w"> </span><span class="nv">student.age</span><span class="p">[</span><span class="nb">ebx</span><span class="p">]</span>
<span class="w"> </span><span class="nf">ret</span>
<span class="nf">student_get_age</span><span class="w"> </span><span class="nv">endp</span>

<span class="nf">student_set_age</span><span class="w"> </span><span class="nv">proc</span><span class="w"> </span><span class="nv">object</span><span class="p">:</span><span class="kt">DWORD</span><span class="p">,</span><span class="w"> </span><span class="nv">age</span><span class="p">:</span><span class="kt">DWORD</span>
<span class="w"> </span><span class="nf">mov</span><span class="w"> </span><span class="nb">ebx</span><span class="p">,</span><span class="w"> </span><span class="nv">object</span>
<span class="w"> </span><span class="nf">mov</span><span class="w"> </span><span class="nb">eax</span><span class="p">,</span><span class="w"> </span><span class="nv">age</span>
<span class="w"> </span><span class="nf">mov</span><span class="w"> </span><span class="nv">student.age</span><span class="p">[</span><span class="nb">ebx</span><span class="p">],</span><span class="w"> </span><span class="nb">eax</span>
<span class="w"> </span><span class="nf">ret</span>
<span class="nf">student_set_age</span><span class="w"> </span><span class="nv">endp</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="C">C</h3></div>
<p>In file student.h:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="cp">#ifndef _STUDENT_H</span>
<span class="cp">#define _STUDENT_H</span>

<span class="k">struct</span><span class="w"> </span><span class="nc">student</span><span class="p">;</span><span class="w"> </span><span class="cm">/* opaque structure */</span>
<span class="k">typedef</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">student</span><span class="w"> </span><span class="n">student</span><span class="p">;</span>

<span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="nf">student_new</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">);</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">student_delete</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">);</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">student_set_age</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">student_get_age</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">);</span>
<span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">student_get_name</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">);</span>

<span class="cp">#endif</span>
</pre></div>
<p>In file student.c:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdlib.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"student.h"</span>

<span class="k">struct</span><span class="w"> </span><span class="nc">student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">;</span>
<span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">;</span>
<span class="p">};</span>

<span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="nf">student_new</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="n">student</span><span class="p">));</span>
<span class="w"> </span><span class="n">s</span><span class="o">-&gt;</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strdup</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
<span class="w"> </span><span class="n">s</span><span class="o">-&gt;</span><span class="n">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">age</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">s</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">student_delete</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">s</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">);</span>
<span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">student_set_age</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">s</span><span class="o">-&gt;</span><span class="n">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">age</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">student_get_age</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">s</span><span class="o">-&gt;</span><span class="n">age</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="nf">student_get_name</span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">s</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>In file main.c:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"student.h"</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">student</span><span class="w"> </span><span class="o">*</span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">student_new</span><span class="p">(</span><span class="mi">19</span><span class="p">,</span><span class="w"> </span><span class="s">"Maurice"</span><span class="p">);</span>
<span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">student_get_name</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">old_age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">student_get_age</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"%s's old age = %i</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">old_age</span><span class="p">);</span>
<span class="w"> </span><span class="n">student_set_age</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="mi">21</span><span class="p">);</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">new_age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">student_get_age</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"%s's new age = %i</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="n">new_age</span><span class="p">);</span>
<span class="w"> </span><span class="n">student_delete</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>In file Makefile:
</p>
<div class="mw-highlight mw-highlight-lang-makefile mw-content-ltr" dir="ltr"><pre><span class="nf">all</span><span class="o">:</span><span class="w"> </span><span class="n">out</span>.<span class="n">txt</span>; <span class="n">cat</span> $&lt;
<span class="nf">out.txt</span><span class="o">:</span><span class="w"> </span><span class="n">main</span>; ./$&lt; &gt; $@
<span class="nf">main</span><span class="o">:</span><span class="w"> </span><span class="n">main</span>.<span class="n">o</span> <span class="n">student</span>.<span class="n">o</span>
<span class="nf">main.o student.o</span><span class="o">:</span><span class="w"> </span><span class="n">student</span>.<span class="n">h</span>
<span class="nf">clean</span><span class="o">:</span><span class="w"> </span>;<span class="k">$(</span><span class="nv">RM</span><span class="k">)</span> *.<span class="n">o</span> <span class="n">out</span>.<span class="n">txt</span> <span class="n">main</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="C++">C++</h3></div>
<p>In file Student.h:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span class="cp">#ifndef STUDENT_H</span>
<span class="cp">#define STUDENT_H</span>

<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string&gt;</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Student</span><span class="w"> </span><span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
<span class="w"> </span><span class="n">Student</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>

<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="nf">name</span><span class="p">()</span><span class="w"> </span><span class="k">const</span><span class="p">;</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">name</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">name</span><span class="p">);</span>

<span class="k">private</span><span class="o">:</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="w"> </span><span class="n">name_</span><span class="p">;</span>
<span class="p">};</span>

<span class="cp">#endif</span>
</pre></div>
<p>In file Student.cpp:
</p>
<div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span class="cp">#include</span><span class="w"> </span><span class="cpf">"Student.h"</span>

<span class="n">Student</span><span class="o">::</span><span class="n">Student</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">name_</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="p">}</span>

<span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">Student</span><span class="o">::</span><span class="n">name</span><span class="p">()</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">name_</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="n">Student</span><span class="o">::</span><span class="n">name</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span><span class="w"> </span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">name_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="C#">C#</h3></div>
<p>This example illustrates the <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> idea of <a href="Property_(programming)#" title="Property (programming)">properties</a>, which are a special type of <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> member. Unlike Java, no explicit methods are defined; a public 'property' contains the logic to handle the actions. Note use of the built-in (undeclared) variable <code>value</code>.
</p>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>

<span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="w"> </span><span class="c1">/// Gets or sets student's name</span>
<span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">Name</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">get</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">set</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">value</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>In later C# versions (.NET Framework 3.5 and above), this example may be abbreviated as follows, without declaring the private variable <code>name</code>.
</p>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">Name</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">get</span><span class="p">;</span><span class="w"> </span><span class="k">set</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Using the abbreviated syntax means that the underlying variable is no longer available from inside the class. As a result, the <code>set</code> portion of the property must be present for assignment. Access can be restricted with a <code>set</code>-specific access modifier.
</p>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">Name</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">get</span><span class="p">;</span><span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="k">set</span><span class="p">;</span><span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Common_Lisp">Common Lisp</h3></div>
<p>In <a href="Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a>, slot specifications within class definitions may specify any of the <code>:reader</code>, <code>:writer</code> and <code>:accessor</code> options (even multiple times) to define reader methods, setter methods and accessor methods (a reader method and the respective <code>setf</code> method).<sup id="cite_ref-defclass_3-0" class="reference"><a href="#cite_note-defclass-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Slots are always directly accessible through their names with the use of <code>with-slots</code> and <code>slot-value</code>, and the slot accessor options define specialized methods that use <code>slot-value</code>.<sup id="cite_ref-defclass-accessors_4-0" class="reference"><a href="#cite_note-defclass-accessors-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>CLOS itself has no notion of properties, although the <a href="Common_Lisp_Object_System#Metaobject_Protocol" title="Common Lisp Object System">MetaObject Protocol</a> extension specifies means to access a slot's reader and writer function names, including the ones generated with the <code>:accessor</code> option.<sup id="cite_ref-mop-slot-definitions_5-0" class="reference"><a href="#cite_note-mop-slot-definitions-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>The following example shows a definition of a student class using these slot options and direct slot access:
</p>
<div class="mw-highlight mw-highlight-lang-lisp mw-content-ltr" dir="ltr"><pre><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">student</span><span class="w"> </span><span class="p">()</span>
<span class="w"> </span><span class="p">((</span><span class="nv">name</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:name</span><span class="w"> </span><span class="ss">:initform</span><span class="w"> </span><span class="s">""</span><span class="w"> </span><span class="ss">:accessor</span><span class="w"> </span><span class="nv">student-name</span><span class="p">)</span><span class="w"> </span><span class="c1">; student-name is setf'able</span>
<span class="w"> </span><span class="p">(</span><span class="nv">birthdate</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:birthdate</span><span class="w"> </span><span class="ss">:initform</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="ss">:reader</span><span class="w"> </span><span class="nv">student-birthdate</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nc">number</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:number</span><span class="w"> </span><span class="ss">:initform</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="ss">:reader</span><span class="w"> </span><span class="nv">student-number</span><span class="w"> </span><span class="ss">:writer</span><span class="w"> </span><span class="nv">set-student-number</span><span class="p">)))</span>

<span class="c1">;; Example of a calculated property getter (this is simply a method)</span>
<span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nv">student-age</span><span class="w"> </span><span class="p">((</span><span class="nv">self</span><span class="w"> </span><span class="nv">student</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="p">(</span><span class="nb">get-universal-time</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">student-birthdate</span><span class="w"> </span><span class="nv">self</span><span class="p">)))</span>

<span class="c1">;; Example of direct slot access within a calculated property setter</span>
<span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="nv">student-age</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">new-age</span><span class="w"> </span><span class="p">(</span><span class="nv">self</span><span class="w"> </span><span class="nv">student</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="nb">with-slots</span><span class="w"> </span><span class="p">(</span><span class="nv">birthdate</span><span class="p">)</span><span class="w"> </span><span class="nv">self</span>
<span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="nv">birthdate</span><span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="p">(</span><span class="nb">get-universal-time</span><span class="p">)</span><span class="w"> </span><span class="nv">new-age</span><span class="p">))</span>
<span class="w"> </span><span class="nv">new-age</span><span class="p">))</span>

<span class="c1">;; The slot accessing options generate methods, thus allowing further method definitions</span>
<span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nv">set-student-number</span><span class="w"> </span><span class="ss">:before</span><span class="w"> </span><span class="p">(</span><span class="nv">new-number</span><span class="w"> </span><span class="p">(</span><span class="nv">self</span><span class="w"> </span><span class="nv">student</span><span class="p">))</span>
<span class="w"> </span><span class="c1">;; You could also check if a student with the new-number already exists.</span>
<span class="w"> </span><span class="p">(</span><span class="nb">check-type</span><span class="w"> </span><span class="nv">new-number</span><span class="w"> </span><span class="p">(</span><span class="nc">integer</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="nb">*</span><span class="p">)))</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="D">D</h3></div>
<p><a href="D_(programming_language)" title="D (programming language)">D</a> supports a getter and setter function syntax. In version 2 of the language getter and setter class/struct methods should have the <code>@property</code> attribute.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">class</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">char</span><span class="p">[]</span><span class="w"> </span><span class="n">name_</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// Getter</span>
<span class="w"> </span><span class="nd">@property</span><span class="w"> </span><span class="kt">char</span><span class="p">[]</span><span class="w"> </span><span class="n">name</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="n">name_</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="c1">// Setter</span>
<span class="w"> </span><span class="nd">@property</span><span class="w"> </span><span class="kt">char</span><span class="p">[]</span><span class="w"> </span><span class="n">name</span><span class="p">(</span><span class="kt">char</span><span class="p">[]</span><span class="w"> </span><span class="n">name_in</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="n">name_</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">name_in</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>A <code>Student</code> instance can be used like this:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">auto</span><span class="w"> </span><span class="n">student</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Student</span><span class="p">;</span>
<span class="n">student</span><span class="p">.</span><span class="n">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"David"</span><span class="p">;</span><span class="w"> </span><span class="c1">// same effect as student.name("David")</span>
<span class="k">auto</span><span class="w"> </span><span class="n">student_name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">student</span><span class="p">.</span><span class="n">name</span><span class="p">;</span><span class="w"> </span><span class="c1">// same effect as student.name()</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Delphi">Delphi</h3></div>
<p>This is a simple class in Delphi language which illustrates the concept of public property for accessing a private field.
</p>
<div class="mw-highlight mw-highlight-lang-delphi mw-content-ltr" dir="ltr"><pre><span class="k">interface</span>

<span class="k">type</span>
<span class="w"> </span><span class="n">TStudent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">class</span>
<span class="w"> </span><span class="n">strict</span><span class="w"> </span><span class="kp">private</span>
<span class="w"> </span><span class="n">FName</span><span class="o">:</span><span class="w"> </span><span class="k">string</span><span class="o">;</span>
<span class="w"> </span><span class="k">procedure</span><span class="w"> </span><span class="nf">SetName</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Value</span><span class="o">:</span><span class="w"> </span><span class="k">string</span><span class="p">)</span><span class="o">;</span>
<span class="w"> </span><span class="kp">public</span>
<span class="w"> </span><span class="c1">/// &lt;summary&gt;</span>
<span class="w"> </span><span class="c1">/// Get or set the name of the student.</span>
<span class="w"> </span><span class="c1">/// &lt;/summary&gt;</span>
<span class="w"> </span><span class="k">property</span><span class="w"> </span><span class="py">Name</span><span class="o">:</span><span class="w"> </span><span class="k">string</span><span class="w"> </span><span class="kp">read</span><span class="w"> </span><span class="nf">FName</span><span class="w"> </span><span class="kp">write</span><span class="w"> </span><span class="nf">SetName</span><span class="o">;</span>
<span class="w"> </span><span class="k">end</span><span class="o">;</span>

<span class="c1">// ...</span>

<span class="k">implementation</span>

<span class="k">procedure</span><span class="w"> </span><span class="nc">TStudent</span><span class="o">.</span><span class="nf">SetName</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">Value</span><span class="o">:</span><span class="w"> </span><span class="k">string</span><span class="p">)</span><span class="o">;</span>
<span class="k">begin</span>
<span class="w"> </span><span class="n">FName</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">Value</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>

<span class="k">end</span><span class="o">.</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Java">Java</h3></div>
<p>In this example of a simple <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> representing a student with only the name stored, one can see the <a href="Variable_(programming)" class="mw-redirect" title="Variable (programming)">variable</a> <i>name</i> is private, i.e. only visible from the Student class, and the "setter" and "getter" are public, namely the "<code>getName()</code>" and "<code>setName(name)</code>" methods.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getName</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setName</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">newName</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newName</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="JavaScript">JavaScript</h3></div>
<p>In this example constructor-function <code>Student</code> is used to create objects representing a student with only the name stored.
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">function</span><span class="w"> </span><span class="nx">Student</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">name</span><span class="p">;</span>

<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">getName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">_name</span><span class="p">;</span>
<span class="w"> </span><span class="p">};</span>

<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">setName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="p">;</span>
<span class="w"> </span><span class="p">};</span>
<span class="p">}</span>
</pre></div>
<p>Or (using a deprecated way to define accessors in Web browsers):<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">function</span><span class="w"> </span><span class="nx">Student</span><span class="p">(</span><span class="nx">name</span><span class="p">){</span>
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">name</span><span class="p">;</span>
<span class="w"> </span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">__defineGetter__</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">_name</span><span class="p">;</span>
<span class="w"> </span><span class="p">});</span>
<span class="w"> </span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">__defineSetter__</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="p">;</span>
<span class="w"> </span><span class="p">});</span>
<span class="p">}</span>
</pre></div>
<p>Or (using prototypes for inheritance and <a href="ES6" class="mw-redirect" title="ES6">ES6</a> accessor syntax):
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">function</span><span class="w"> </span><span class="nx">Student</span><span class="p">(</span><span class="nx">name</span><span class="p">){</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">name</span><span class="p">;</span>
<span class="p">}</span>

<span class="nx">Student</span><span class="p">.</span><span class="nx">prototype</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">get</span><span class="w"> </span><span class="nx">name</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="p">;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nx">set</span><span class="w"> </span><span class="nx">name</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">};</span>
</pre></div>
<p>Or (without using prototypes):
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">var</span><span class="w"> </span><span class="nx">Student</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">get</span><span class="w"> </span><span class="nx">name</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="p">;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nx">set</span><span class="w"> </span><span class="nx">name</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">};</span>
</pre></div>
<p>Or (using defineProperty):
</p>
<div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span class="kd">function</span><span class="w"> </span><span class="nx">Student</span><span class="p">(</span><span class="nx">name</span><span class="p">){</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">name</span><span class="p">;</span>
<span class="p">}</span>
<span class="nb">Object</span><span class="p">.</span><span class="nx">defineProperty</span><span class="p">(</span><span class="nx">Student</span><span class="p">.</span><span class="nx">prototype</span><span class="p">,</span><span class="w"> </span><span class="s1">'name'</span><span class="p">,</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">get</span><span class="o">:</span><span class="w"> </span><span class="kd">function</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="p">;</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nx">set</span><span class="o">:</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">});</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="ActionScript_3.0">ActionScript 3.0</h3></div>
<div class="mw-highlight mw-highlight-lang-actionscript mw-content-ltr" dir="ltr"><pre><span class="kd">package</span>
<span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span><span class="w"> </span><span class="nx">Student</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">String</span><span class="o">;</span>
<span class="w"> </span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="kd">get</span><span class="w"> </span><span class="nx">name</span><span class="p">()</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">String</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">_name</span><span class="o">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="kd">set</span><span class="w"> </span><span class="nx">name</span><span class="p">(</span><span class="nx">value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nb">String</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nx">void</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nx">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">value</span><span class="o">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Objective-C">Objective-C</h3></div>
<p>Using traditional Objective-C 1.0 syntax, with manual reference counting as the one working on <a href="GNUstep" title="GNUstep">GNUstep</a> on <a href="Ubuntu_version_history#1204" title="Ubuntu version history">Ubuntu 12.04</a>:
</p>
<div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span class="k">@interface</span> <span class="nc">Student</span>&nbsp;: <span class="bp">NSObject</span>
<span class="p">{</span>
<span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">_name</span><span class="p">;</span>
<span class="p">}</span>

<span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">name</span><span class="p">;</span>
<span class="p">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">setName:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">name</span><span class="p">;</span>

<span class="k">@end</span>

<span class="k">@implementation</span> <span class="nc">Student</span>

<span class="p">-</span> <span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nf">name</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">_name</span><span class="p">;</span>
<span class="p">}</span>

<span class="p">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">setName:</span><span class="p">(</span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="nv">name</span>
<span class="p">{</span>
<span class="w"> </span><span class="p">[</span><span class="n">_name</span><span class="w"> </span><span class="k">release</span><span class="p">];</span>
<span class="w"> </span><span class="n">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">name</span><span class="w"> </span><span class="k">retain</span><span class="p">];</span>
<span class="p">}</span>

<span class="k">@end</span>
</pre></div>
<p>Using newer Objective-C 2.0 syntax as used in <a href="Mac_OS_X_10.6" class="mw-redirect" title="Mac OS X 10.6">Mac OS X 10.6</a>, <a href="IOS_4" title="IOS 4">iOS 4</a> and <a href="Xcode" title="Xcode">Xcode</a> 3.2, generating the same code as described above:
</p>
<div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span class="k">@interface</span> <span class="nc">Student</span>&nbsp;: <span class="bp">NSObject</span>

<span class="k">@property</span><span class="w"> </span><span class="p">(</span><span class="k">nonatomic</span><span class="p">,</span><span class="w"> </span><span class="k">retain</span><span class="p">)</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">;</span>

<span class="k">@end</span>

<span class="k">@implementation</span> <span class="nc">Student</span>

<span class="k">@synthesize</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">_name</span><span class="p">;</span>

<span class="k">@end</span>
</pre></div>
<p>And starting with <a href="OS_X_10.8" class="mw-redirect" title="OS X 10.8">OS X 10.8</a> and <a href="IOS_6" title="IOS 6">iOS 6</a>, while using <a href="Xcode" title="Xcode">Xcode</a> 4.4 and up, syntax can be even simplified:
</p>
<div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span class="k">@interface</span> <span class="nc">Student</span>&nbsp;: <span class="bp">NSObject</span>

<span class="k">@property</span><span class="w"> </span><span class="p">(</span><span class="k">nonatomic</span><span class="p">,</span><span class="w"> </span><span class="k">strong</span><span class="p">)</span><span class="w"> </span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">name</span><span class="p">;</span>

<span class="k">@end</span>

<span class="k">@implementation</span> <span class="nc">Student</span>

<span class="c1">//Nothing goes here and it's OK.</span>

<span class="k">@end</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Perl">Perl</h3></div>
<div class="mw-highlight mw-highlight-lang-perl mw-content-ltr" dir="ltr"><pre><span class="k">package</span><span class="w"> </span><span class="nn">Student</span><span class="p">;</span>

<span class="k">sub</span><span class="w"> </span><span class="nf">new</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nb">bless</span><span class="w"> </span><span class="p">{},</span><span class="w"> </span><span class="nb">shift</span><span class="p">;</span>
<span class="p">}</span>

<span class="k">sub</span><span class="w"> </span><span class="nf">set_name</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">my</span><span class="w"> </span><span class="nv">$self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">shift</span><span class="p">;</span>
<span class="w"> </span><span class="nv">$self</span><span class="o">-&gt;</span><span class="p">{</span><span class="n">name</span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">$_</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="p">}</span>

<span class="k">sub</span><span class="w"> </span><span class="nf">get_name</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">my</span><span class="w"> </span><span class="nv">$self</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">shift</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nv">$self</span><span class="o">-&gt;</span><span class="p">{</span><span class="n">name</span><span class="p">};</span>
<span class="p">}</span>

<span class="mi">1</span><span class="p">;</span>
</pre></div>
<p>Or, using Class::Accessor
</p>
<div class="mw-highlight mw-highlight-lang-perl mw-content-ltr" dir="ltr"><pre><span class="k">package</span><span class="w"> </span><span class="nn">Student</span><span class="p">;</span>
<span class="k">use</span><span class="w"> </span><span class="nn">base</span><span class="w"> </span><span class="sx">qw(Class::Accessor)</span><span class="p">;</span>
<span class="nn">__PACKAGE__</span><span class="o">-&gt;</span><span class="n">follow_best_practice</span><span class="p">;</span>

<span class="nn">Student</span><span class="o">-&gt;</span><span class="n">mk_accessors</span><span class="p">(</span><span class="sx">qw(name)</span><span class="p">);</span>

<span class="mi">1</span><span class="p">;</span>
</pre></div>
<p>Or, using the <a href="Moose_(Perl)" title="Moose (Perl)">Moose Object System</a>:
</p>
<div class="mw-highlight mw-highlight-lang-perl mw-content-ltr" dir="ltr"><pre><span class="k">package</span><span class="w"> </span><span class="nn">Student</span><span class="p">;</span>
<span class="k">use</span><span class="w"> </span><span class="nn">Moose</span><span class="p">;</span>

<span class="c1"># Moose uses the attribute name as the setter and getter, the reader and writer properties</span>
<span class="c1"># allow us to override that and provide our own names, in this case get_name and set_name</span>
<span class="n">has</span><span class="w"> </span><span class="s">'name'</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="p">(</span><span class="n">is</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">'rw'</span><span class="p">,</span><span class="w"> </span><span class="n">isa</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">'Str'</span><span class="p">,</span><span class="w"> </span><span class="n">reader</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">'get_name'</span><span class="p">,</span><span class="w"> </span><span class="n">writer</span><span class="w"> </span><span class="o">=&gt;</span><span class="w"> </span><span class="s">'set_name'</span><span class="p">);</span>

<span class="mi">1</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="PHP">PHP</h3></div>
<p>PHP defines the "magic methods" <code>__get</code>and<code>__set</code> for properties of objects.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>In this example of a simple <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a> representing a student with only the name stored, one can see the <a href="Variable_(programming)" class="mw-redirect" title="Variable (programming)">variable</a> <i>name</i> is private, i.e. only visible from the Student class, and the "setter" and "getter" is public, namely the <code>getName()</code> and <code>setName('name')</code> methods.
</p>
<div class="mw-highlight mw-highlight-lang-php mw-content-ltr" dir="ltr"><pre><span class="k">class</span> <span class="nc">Student</span>
<span class="p">{</span>
<span class="k">private</span> <span class="nx">string</span> <span class="nv">$name</span><span class="p">;</span>

<span class="sd">/**</span>
<span class="sd"> * @return string The name.</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getName</span><span class="p">()</span><span class="o">:</span> <span class="nx">string</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">name</span><span class="p">;</span>
<span class="p">}</span>

<span class="sd">/**</span>
<span class="sd"> * @param string $newName The name to set.</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setName</span><span class="p">(</span><span class="nx">string</span> <span class="nv">$newName</span><span class="p">)</span><span class="o">:</span> <span class="nx">void</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-&gt;</span><span class="na">name</span> <span class="o">=</span> <span class="nv">$newName</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Python">Python</h3></div>
<p>This example uses a Python class with one variable, a getter, and a setter.
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="k">class</span><span class="w"> </span><span class="nc">Student</span><span class="p">:</span>
<span class="c1"># Initializer</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># An instance variable to hold the student's name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>

<span class="c1"># Getter method</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>

<span class="c1"># Setter method</span>
<span class="nd">@name</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span><span class="w"> </span><span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new_name</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">new_name</span>
</pre></div>
<div class="mw-highlight mw-highlight-lang-pycon mw-content-ltr" dir="ltr"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span> <span class="o">=</span> <span class="n">Student</span><span class="p">(</span><span class="s2">"Bob"</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span><span class="o">.</span><span class="n">name</span>
<span class="go">Bob</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">"Alice"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span><span class="o">.</span><span class="n">name</span>
<span class="go">Alice</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="s2">"Charlie"</span> <span class="c1"># bypass the setter</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">bob</span><span class="o">.</span><span class="n">_name</span> <span class="c1"># bypass the getter</span>
<span class="go">Charlie</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Racket">Racket</h3></div>
<p>In <a href="Racket_(programming_language)" title="Racket (programming language)">Racket</a>, the object system is a way to organize code that comes in addition to modules and units. As in the rest of the language, the object system has first-class values and lexical scope is used to control access to objects and methods.
</p>
<div class="mw-highlight mw-highlight-lang-racket mw-content-ltr" dir="ltr"><pre><span class="kn">#lang </span><span class="nn">racket</span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">student%</span>
<span class="w"> </span><span class="p">(</span><span class="k">class</span><span class="w"> </span><span class="nb">object%</span>
<span class="w"> </span><span class="p">(</span><span class="k">init-field</span><span class="w"> </span><span class="n">name</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="k">define/public</span><span class="w"> </span><span class="p">(</span><span class="n">get-name</span><span class="p">)</span><span class="w"> </span><span class="n">name</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="k">define/public</span><span class="w"> </span><span class="p">(</span><span class="n">set-name!</span><span class="w"> </span><span class="n">new-name</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="n">new-name</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="k">super-new</span><span class="p">)))</span>

<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">student%</span><span class="w"> </span><span class="p">[</span><span class="n">name</span><span class="w"> </span><span class="s2">"Alice"</span><span class="p">]))</span>
<span class="p">(</span><span class="k">send</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="n">get-name</span><span class="p">)</span><span class="w"> </span><span class="c1">; =&gt; "Alice"</span>
<span class="p">(</span><span class="k">send</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="n">set-name!</span><span class="w"> </span><span class="s2">"Bob"</span><span class="p">)</span>
<span class="p">(</span><span class="k">send</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="n">get-name</span><span class="p">)</span><span class="w"> </span><span class="c1">; =&gt; "Bob"</span>
</pre></div>
<p>Struct definitions are an alternative way to define new types of values, with mutators being present when explicitly required:
</p>
<div class="mw-highlight mw-highlight-lang-racket mw-content-ltr" dir="ltr"><pre><span class="kn">#lang </span><span class="nn">racket</span>
<span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="n">student</span><span class="w"> </span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="w"> </span><span class="kd">#:mutable</span><span class="p">)</span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">(</span><span class="n">student</span><span class="w"> </span><span class="s2">"Alice"</span><span class="p">))</span>
<span class="p">(</span><span class="n">set-student-name!</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="s2">"Bob"</span><span class="p">)</span>
<span class="p">(</span><span class="n">student-name</span><span class="w"> </span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="c1">; =&gt; "Bob"</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Ruby">Ruby</h3></div>
<p>In <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, individual accessor and mutator methods may be defined, or the metaprogramming constructs <code>attr_reader</code> or <code>attr_accessor</code> may be used both to declare a private variable in a class and to provide either read-only or read-write public access to it respectively.
</p><p>Defining individual accessor and mutator methods creates space for pre-processing or validation of the data
</p>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">name</span>
<span class="w"> </span><span class="vi">@name</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">name=</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="w"> </span><span class="vi">@name</span><span class="o">=</span><span class="n">value</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
</pre></div>
<p>Read-only simple public access to implied <code>@name</code> variable
</p>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="w"> </span><span class="kp">attr_reader</span><span class="w"> </span><span class="ss">:name</span>
<span class="k">end</span>
</pre></div>
<p>Read-write simple public access to implied <code>@name</code> variable
</p>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span class="k">class</span><span class="w"> </span><span class="nc">Student</span>
<span class="w"> </span><span class="kp">attr_accessor</span><span class="w"> </span><span class="ss">:name</span>
<span class="k">end</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Rust">Rust</h3></div>
<div class="mw-highlight mw-highlight-lang-rust mw-content-ltr" dir="ltr"><pre><span class="k">struct</span><span class="w"> </span><span class="nc">Student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="p">,</span>
<span class="p">}</span>

<span class="k">impl</span><span class="w"> </span><span class="n">Student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">name</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="kp">&amp;</span><span class="nb">String</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="o">&amp;</span><span class="bp">self</span><span class="p">.</span><span class="n">name</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">name_mut</span><span class="p">(</span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span class="kp">&amp;</span><span class="nc">mut</span><span class="w"> </span><span class="nb">String</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="o">&amp;</span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">name</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Smalltalk">Smalltalk</h3></div>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre> <span class="nf">age:</span> <span class="nv">aNumber</span>
<span class="c">" Set the receiver age to be aNumber if is greater than 0 and less than 150 "</span>
(<span class="nv">aNumber</span> <span class="nf">between:</span> <span class="m">0</span> <span class="nf">and:</span> <span class="m">150</span>)
<span class="nb">ifTrue:</span> [ <span class="nv">age</span> <span class="o">:=</span> <span class="nv">aNumber</span> ]
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Swift">Swift</h3></div>
<div class="mw-highlight mw-highlight-lang-swift mw-content-ltr" dir="ltr"><pre><span class="kd">class</span><span class="w"> </span><span class="nc">Student</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">_name</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">""</span>

<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">name</span><span class="p">:</span><span class="w"> </span><span class="nb">String</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kr">get</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">self</span><span class="p">.</span><span class="n">_name</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kr">set</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kc">self</span><span class="p">.</span><span class="n">_name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">newValue</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Visual_Basic_.NET">Visual Basic .NET</h3></div>
<p>This example illustrates the VB.NET idea of properties, which are used in classes. Similar to C#, there is an explicit use of the <code>Get</code> and <code>Set</code> methods.
</p>
<div class="mw-highlight mw-highlight-lang-vbnet mw-content-ltr" dir="ltr"><pre><span class="k">Public</span><span class="w"> </span><span class="k">Class</span><span class="w"> </span><span class="nc">Student</span>

<span class="w"> </span><span class="k">Private</span><span class="w"> </span><span class="n">_name</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">String</span>

<span class="w"> </span><span class="k">Public</span><span class="w"> </span><span class="k">Property</span><span class="w"> </span><span class="nf">Name</span><span class="p">()</span>
<span class="w"> </span><span class="k">Get</span>
<span class="w"> </span><span class="k">Return</span><span class="w"> </span><span class="n">_name</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Get</span>
<span class="w"> </span><span class="k">Set</span><span class="p">(</span><span class="k">ByVal</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
<span class="w"> </span><span class="n">_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Set</span>
<span class="w"> </span><span class="k">End</span><span class="w"> </span><span class="k">Property</span>

<span class="k">End</span><span class="w"> </span><span class="k">Class</span>
</pre></div>
<p>In VB.NET 2010, Auto Implemented properties can be utilized to create a property without having to use the Get and Set syntax. Note that a hidden variable is created by the compiler, called <code>_name</code>, to correspond with the Property <code>name</code>. Using another variable within the class named <code>_name</code> would result in an error. Privileged access to the underlying variable is available from within the class.
</p>
<div class="mw-highlight mw-highlight-lang-vbnet mw-content-ltr" dir="ltr"><pre><span class="k">Public</span><span class="w"> </span><span class="k">Class</span><span class="w"> </span><span class="nc">Student</span>
<span class="w"> </span><span class="k">Public</span><span class="w"> </span><span class="k">Property</span><span class="w"> </span><span class="nf">name</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">String</span>
<span class="k">End</span><span class="w"> </span><span class="k">Class</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Property_(programming)" title="Property (programming)">Property (programming)</a></li>
<li><a href="Indexer_(programming)" title="Indexer (programming)">Indexer (programming)</a></li>
<li><a href="Immutable_object" title="Immutable object">Immutable object</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFStephen_Fuqua2009" class="citation web cs1">Stephen Fuqua (2009). <a rel="nofollow" class="external text" href="https://archive.today/20110513104930/http://www.safnet.com/writing/tech/archives/2009/04/automatic_prope.html">"Automatic Properties in C# 3.0"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.safnet.com/writing/tech/archives/2009/04/automatic_prope.html">the original</a> on 2011-05-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-10-19</span></span>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFTim_Lee1998" class="citation web cs1">Tim Lee (1998-07-13). <a rel="nofollow" class="external text" href="https://www.scribd.com/doc/53104779/Run-Time-Efficiency-of-Accessor-Functions">"Run Time Efficiency of Accessor Functions"</a>.</cite></span>
</li>
<li id="cite_note-defclass-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-defclass_3-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.lispworks.com/documentation/HyperSpec/Body/m_defcla.htm">"CLHS: Macro DEFCLASS"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-03-29</span></span>.</cite></span>
</li>
<li id="cite_note-defclass-accessors-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-defclass-accessors_4-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.lispworks.com/documentation/HyperSpec/Body/07_eb.htm">"CLHS: 7.5.2 Accessing Slots"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-03-29</span></span>.</cite></span>
</li>
<li id="cite_note-mop-slot-definitions-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-mop-slot-definitions_5-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.lisp.org/mop/concepts.html#slot-definitions">"MOP: Slot Definitions"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-03-29</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dlang.org/function.html">"Functions - D Programming Language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-01-13</span></span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dlang.org/dstyle.html">"The D Style"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2013-02-01</span></span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__">"Object.prototype.__defineGetter__() - JavaScript | MDN"</a>. <i>developer.mozilla.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-07-06</span></span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.php.net/manual/en/language.oop5.overloading.php">"PHP: Overloading - Manual"</a>. <i>www.php.net</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-07-06</span></span>.</cite></span>
</li>
</ol></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-10-06" href="https://en.wikipedia.org/wiki/?title=Mutator_method&amp;oldid=1249641577">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>